home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 96 / Amiga News 96.iso / amig_ad_os / amitex / arexx / format.amitex < prev    next >
Text File  |  1996-12-30  |  4KB  |  144 lines

  1. /* Formatage d'un texte. © R.Florac $VER: 2.00 4-11-96 */
  2. /* Saint-Martin, 17 août 1993,     Version 1.00a */
  3. /* Chez Corbin, 4 novembre 1996, Version 2.00  */
  4.  
  5. signal on error
  6. signal on syntax
  7. options results
  8.  
  9. 'LOCK(-1)'
  10. 'BLOCK(1)'              /* ligne début bloc */
  11. l1=result
  12. if l1<=0 then
  13.     call marquage_bloc
  14.     else
  15.     do
  16.     'BLOCK(3)'      /* ligne fin bloc */
  17.     l2 = result
  18.     if l2<=0 then exit
  19.     end
  20.  
  21. mg=getclip(marge_gauche)
  22. md=getclip(marge_droite)
  23. if (mg="" | md="") then call fixer_marges
  24. if (mg<0 | mg>md-30) then call fixer_marges
  25.  
  26. nbcar=md-mg+1    /* nbre de caractères par ligne */
  27.  
  28. 'UNMARK(0)'     /* démarquage éventuel du bloc */
  29. 'MODEDIT(1)'    /* lecture du mode actuel, passer en mode INSERTION !!! */
  30. mode = result
  31. l=l1
  32.  
  33. /* Lecture des chaînes de caractères du paragraphe */
  34. 'GOTO(1,'l1')'      /* Déplacement sur la première ligne */
  35.  
  36. debut=""
  37. paragraphe=""
  38. do while l<=l2
  39.     'GOTO(1,LINE)'              /* curseur sur la 1ère colonne */
  40.     if l~=l1 then do
  41.     'READCHAR(1)'
  42.     if result=' ' then 'DELRIGHT(1)'    /* Effacement du mot à droite du curseur */
  43.     end
  44.     'READLINE(LINE)'        /* Lecture des lignes à rassembler */
  45.     paragraphe = paragraphe||debut||result
  46.     debut=' '
  47.     l=l+1
  48.     'GOTO(COL,LINE+1)'      /* ligne suivante */
  49. end
  50. l=l1
  51. 'GOTO(1,'l')'       /* revenir à la première ligne */
  52. do forever
  53.     mot=1
  54.     n=2
  55.     dernier=wordindex(paragraphe,2)
  56.     if dernier=0 then dernier=length(paragraphe)
  57.     else
  58.     do while n<nbcar    /* Construction d'une ligne */
  59.     n=wordindex(paragraphe,mot)
  60.     if n=0 then do
  61.         n=nbcar
  62.         if length(paragraphe)<n then dernier=n
  63.     end
  64.     else
  65.         if n<nbcar then do
  66.         mot=mot+1
  67.         dernier = n-1
  68.         end
  69.     end
  70.     'GOTO(1,LINE)'
  71.     'DELEND(1)'                 /* Effacer la fin de l'ancienne ligne */
  72.     if mg>0 then 'WRITE("'copies('' '',mg)'")'
  73.     'GOTO('mg+1',LINE)'
  74.     call ecriture(paragraphe,dernier)
  75.     'GOTO(COL,LINE+1)'          /* passer à la ligne suivante */
  76.     l=l+1
  77.     if l>l2 then 'INSLINES(1)'  /* insérer une nouvelle ligne si nécessaire */
  78.     if length(paragraphe)-dernier>0 then
  79.     paragraphe = right(paragraphe,length(paragraphe)-dernier)
  80.     else leave
  81. end
  82. 'GOTO(1,LINE)'          /* placer le curseur au début de la ligne */
  83. do while l<=l2        /* effacer les lignes en trop */
  84.     'SUPLINES(1)'
  85.     l=l+1
  86. end
  87. 'MODEDIT('mode')'       /* remettre dans l'ancien mode */
  88. exit
  89.  
  90. marquage_bloc: procedure expose l1 l2
  91.     cr = '0a'x
  92.     'REQUEST("Voulez-vous marquer le'||cr||'bloc à formater?")'
  93.     if result=0 then exit
  94.     'MESSAGE("Cliquez sur la ligne de début'cr'puis sur la ligne de fin'cr'Vous pouvez utiliser'cr'l''ascenseur et les'cr'flèches pour faire défiler'cr'le texte.")'
  95.     'PICKLINE("Cliquez sur la ligne de début")'
  96.     l1=result
  97.     if l1<0 then exit
  98.     'PICKLINE("Cliquez sur la ligne de fin")'
  99.     l2=result
  100.     if l2<0 then exit
  101.     return
  102. end
  103.  
  104. ecriture: procedure
  105.     parse arg paragraphe,dernier
  106.     do forever
  107.     position=index(paragraphe,'"')      /* test présence guillemet */
  108.     if position>0 & position<dernier then do
  109.         'WRITE("'substr(paragraphe,1,position)')'
  110.         'WRITE("""")'       /* écriture du guillemet */
  111.         paragraphe=right(paragraphe,length(paragraphe)-position)
  112.         dernier=dernier-position
  113.     end
  114.     else do
  115.         'WRITE("'substr(paragraphe,1,dernier)'")'
  116.         position = 0
  117.     end
  118.     if position = 0 then return
  119.     end
  120. return
  121.  
  122. fixer_marges: procedure expose mg md
  123.     cr = '0a'x
  124.     'ASK("Donnez la marge gauche")'
  125.     mg=result
  126.     if mg<0 then exit
  127.     'ASK("Donnez la marge droite")'
  128.     md=result
  129.     if md<mg+30 then exit
  130.     a = setclip(marge_gauche,mg)
  131.     a = setclip(marge_droite,md)
  132.     return
  133. end
  134.  
  135. /* Traitement des erreurs, interruption du programme */
  136. syntax:
  137. erreur=RC
  138. 'MESSAGE("Script format.edit"+CHR(10)+"Erreur de syntaxe"+CHR(10)+"en ligne 'SIGL'"+CHR(10)+"'errortext(erreur)'")'
  139. exit
  140.  
  141. error:
  142. 'MESSAGE("Script format.edit"+CHR(10)+"Erreur en ligne 'SIGL'")'
  143. exit
  144.